// @flow

function sum(a: number, b: number) {
  return a + b
}
console.log(sum(100, 200))
// sum('100', '200')

function square(n) {
  return n * n
}
console.log(square(10))

//
// 1.基本类型
const a: string = 'string'
const b: number = 100 //Infinity NaN -Infinity
const c: boolean = true //false
const d: null = null
const e: void = undefined
const f: symbol = Symbol()

// 2.数组类型
const g: Array<string> = ['a', '100']
const h: string[] = ['a', '100']
// flow 固定长度数组 - 元组
const i: [string, number, boolean] = ['a', 100, true]

// 3.对象类型
const j: { a: string, b: number, c: boolean } = { a: 'a', b: 100, c: true }
const k: { a: string, b: number, c?: boolean } = { a: 'a', b: 100 }
const l: { [string]: string } = { key1: 'value1', key2: '100' }

// 4.函数类型
//(string, number) => void|string|number

// example
function foo(callback: (string, number) => void) {
  callback('string', 100)
}

foo(function (str, n) {
  // str => string
  // n => number
  //
  // no return(or return undefined)
})

// 5.特殊类型
//...

// 6.mixed 和 any 类型
// mixed = string | number | ...
// any = string | number | ...
// 区别：mixed是强类型，使用时需要明确的类型判断；any时弱类型，不需要做类型判断
